Contemporary computer systems offer users the ability to magnify a portion of their display screen, typically for providing visually-impaired users with better accessibility to computers, although also offering mainstream users the benefit of magnification in certain contexts. In general, when the user runs a magnifier, a magnification window is opened and the magnified content displayed in that window. The user can adjust the magnification window in size and position, adjust the magnification level, and possibly choose other effects, e.g., color inversion. One such magnifier program operates by driver hooking, to intercept graphics calls sent towards the video driver, essentially in a screen capture operation, where the magnifier program then scales up a corresponding graphics image in the magnification window.
Many existing accessibility applications generally used chained display drivers to implement magnifiers; for example a Windows® Driver model (WDM) chained display driver is a kernel mode video driver. Programs provided by accessibility (or assisted) technology vendors (ATVs) draw the magnifier window from the driver directly to the display device. This means that the driver's rendering primitives (e.g., DrvXXX, where Graphics DDI, Device Driver Interface, function names are in the DrvXxx form) associated with the magnification window handle (HWND) are not present in the rendering stream intercepted by the chained display driver.
An alternative accessibility technology is described in U.S. patent application Ser. No. 11/180,859, filed Jul. 12, 2005, assigned to the assignee of the present invention and hereby incorporated by reference, which is (among its aspects) generally directed to a magnification engine and API (application programming interface) that renders a magnifier in software and/or hardware. This API technology may be used in conjunction with a non-chained driver model that instead uses accessibility mirror drivers that are attached to the primary display driver, essentially as peers of the primary display driver rather than being above the primary display driver in the rendering path.
Many assistive technology products are combined magnifier/screen reader products that will use mirror drivers and the magnification API. Such products, as well as standalone screen readers are intended to be able to able to describe the area under a magnifier.
However, regardless of whether rendered via software or hardware, the full set of graphics primitives are present in the rendering stream that is sent to the primary display driver. As a result, and because the magnifier window is generally topmost and layered, accessibility code that is in the mirror drivers are unable to distinguish or locate which primitives for the screen are under the magnifier window. This results in an unacceptable blind spot problem in off-screen models, that is, display models built from the primitives that are then used to provide actual display data.
By way of example, the shift from chained display drivers to accessibility mirror drivers and the magnification API/engine cause magnifier windows to obscure rendering information from accessibility applications, such as screen readers. When this happens, the screen readers cannot describe the screen content that is under a magnifier window. At an extreme, if the magnifier was full-screen, the screen reader would not be able to read anything because of the above-described blind spot problem.